/*----------------------------------------------------------------------------*\
|
|						Public Interface to Muse Technology
|
|							     www.Muse.com
| Author : SunJun 
| Email : sundoom@msn.com
\*----------------------------------------------------------------------------*/

//////////////////////////////////////////////////////////////////////////
// $Id: Dict.h,v 1.1 2009/04/03 12:46:10 sunjun Exp $
//////////////////////////////////////////////////////////////////////////

#ifndef __Dict__
#define __Dict__

//////////////////////////////////////////////////////////////////////////

#if defined __cplusplus

//////////////////////////////////////////////////////////////////////////

#include <MReference.h>

//////////////////////////////////////////////////////////////////////////

NAMESPACE_BEGIN

//////////////////////////////////////////////////////////////////////////

	// this class provides an object-oriented dict interface.	
	class API Dict
	{
	public:
		class API Key : public MReference
		{
		public:
			// constructor
			INLINE Key(const CHAR*name, MReference* ptr);

			// destructor
			INLINE ~Key();

			// get the pointer
			INLINE MReference* ptr();

		private:
			Str mName; MReferencePtr mPtr;
		};

		typedef MPtr<Key>KeyPtr;

	public:
		// constructor
		INLINE Dict();

		// destructor
		INLINE ~Dict();

		// get the instance of the dict
		INLINE static Dict& CDECL instance();

		// find the key
		INLINE Key* find( const CHAR*name );

	private:
		// add
		INLINE VOID add( const CHAR*name, Key* key );

		// remove		
		INLINE VOID remove( const CHAR*name );

	private:
		std::map< Str, Key* >mKeys;
	};

//////////////////////////////////////////////////////////////////////////

NAMESPACE_END

//////////////////////////////////////////////////////////////////////////

#endif // __cplusplus

//////////////////////////////////////////////////////////////////////////

#endif // __Dict__

//////////////////////////////////////////////////////////////////////////